Bag এবং MultiSet

Java Technologies - অ্যাপাচি কমন্স কালেকশনস (Apache Common Collection)
156
156

Apache Commons Collections একটি শক্তিশালী লাইব্রেরি যা Java-তে বিভিন্ন ধরনের উন্নত ডেটা স্ট্রাকচার এবং ইউটিলিটি প্রদান করে। এর মধ্যে দুটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার হল Bag এবং MultiSet। এই স্ট্রাকচারগুলি সাধারণ Set এবং List এর মত নয়, কারণ এখানে উপাদানগুলি একাধিকবার উপস্থিত থাকতে পারে। একে অপরকে বেশ কিছু ক্ষেত্রে Set এবং List থেকে আলাদা করে তোলে।

1. Bag (ব্যাগ)

Bag একটি কাস্টম ডেটা স্ট্রাকচার যা একটি কনটেইনারের মতো কাজ করে, যেখানে উপাদানগুলো একাধিকবার থাকতে পারে। এটি counting set এর মতো, অর্থাৎ, এটি ট্র্যাক করে যে একটি নির্দিষ্ট উপাদান কতবার যোগ করা হয়েছে।

Bag এর মধ্যে এমন ফিচার রয়েছে যা Set-এর তুলনায় আলাদা:

  • Duplicates Allowed: এখানে একাধিকবার উপাদান থাকতে পারে। অর্থাৎ, একটি নির্দিষ্ট উপাদান একাধিকবার যোগ করা সম্ভব।
  • Count of Elements: আপনি যেকোনো উপাদানের কতটি ইনস্ট্যান্স রয়েছে তা জানতে পারেন।

Bag Interface

Bag ইন্টারফেসটি কিছু গুরুত্বপূর্ণ মেথড সরবরাহ করে:

  • add(Object o): একটি উপাদান যোগ করা।
  • getCount(Object o): নির্দিষ্ট উপাদানের সংখ্যা জানানো।
  • remove(Object o): উপাদান মুছে ফেলা।

1.1 Bag উদাহরণ

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;

public class BagExample {
    public static void main(String[] args) {
        // Bag তৈরি করা
        Bag<String> bag = new HashBag<>();

        // উপাদান যোগ করা
        bag.add("apple");
        bag.add("banana");
        bag.add("apple");

        // উপাদানটির সংখ্যা দেখানো
        System.out.println("Apple count: " + bag.getCount("apple")); // Output: 2
        System.out.println("Banana count: " + bag.getCount("banana")); // Output: 1

        // সব উপাদান দেখানো
        System.out.println("All elements: " + bag);
    }
}

আউটপুট:

Apple count: 2
Banana count: 1
All elements: [apple, apple, banana]

এখানে:

  • Bag এর মধ্যে "apple" দুইবার এবং "banana" একবার উপস্থিত রয়েছে।
  • getCount("apple") ব্যবহার করে "apple" উপাদানটির উপস্থিতির সংখ্যা বের করা হয়েছে।

2. MultiSet

MultiSet হল একটি কনসেপ্ট যা Bag এর মতোই কাজ করে। এটি এমন একটি ডেটা স্ট্রাকচার যা একাধিকবার একই উপাদান ধারণ করতে পারে। সাধারণত, Bag এবং MultiSet প্রায় সমান, তবে বিভিন্ন লাইব্রেরি বিভিন্ন নাম ব্যবহার করতে পারে।

Apache Commons Collections-এ Bag হল MultiSet এর সমতুল্য, যেখানে Bag এর ভিতরেই উপাদানগুলো একাধিকবার থাকতে পারে এবং তার উপস্থিতির সংখ্যা রেকর্ড করা যায়। তবে, আপনি MultiSet নামের আলাদা কিছু বাস্তবায়ন পেতে পারেন।

3. Bag এবং MultiSet এর মধ্যে পার্থক্য

Bag এবং MultiSet এর মধ্যে তেমন কোনো বড় পার্থক্য নেই, কারণ উভয়ই একই ধরনের কাজ সম্পাদন করে:

  • Duplicates: একে অপরের থেকে duplicates রাখার সুবিধা রয়েছে।
  • Counting: সব উপাদানের সংখ্যা ট্র্যাক করা হয়।

তবে কিছু লাইব্রেরিতে এই দুটি ডেটা স্ট্রাকচারের জন্য আলাদা আলাদা নাম ব্যবহার করা হয়।

4. এটি কোথায় ব্যবহার করবেন?

Bag এবং MultiSet বিশেষ করে তখন ব্যবহার করা হয় যখন:

  • আপনি একটি ডেটা স্ট্রাকচারে একই উপাদান একাধিকবার রাখতে চান।
  • আপনি উপাদানের উপস্থিতির সংখ্যা জানাতে চান।
  • Collection এর মধ্যে উপাদানগুলি কতবার রয়েছে এবং প্রতিটি উপাদানকে কার্যকরীভাবে ট্র্যাক করতে চান।

উদাহরণস্বরূপ:

  • বাজারের তালিকা: আপনি একটি Bag ব্যবহার করে জানতে পারবেন কোনো আইটেম কতবার কেনা হয়েছে।
  • কাউন্টিং: শব্দ গণনা (Word Count) বা কাস্টম ডেটা সংক্রান্ত সমস্যা সমাধানে।

সারাংশ

  • Bag এবং MultiSet একই ধরনের ডেটা স্ট্রাকচার যা একাধিকবার উপাদান রাখতে সক্ষম।
  • Bag মূলত counting set হিসেবে কাজ করে, যেখানে উপাদানগুলি কতবার যোগ করা হয়েছে তা রেকর্ড করা যায়।
  • Apache Commons CollectionsHashBag বা TreeBag এর মতো বাস্তবায়ন রয়েছে।
  • এই স্ট্রাকচারটি এমন পরিস্থিতিতে কাজে আসে যেখানে একাধিক বার উপাদান রাখা এবং তাদের সংখ্যা ট্র্যাক করার প্রয়োজন হয়।
common.content_added_by

Bag কি এবং এর ব্যবহারের ক্ষেত্র

143
143

Bag কি?

Bag হল অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরির একটি ডেটা স্ট্রাকচার, যা একটি কালেকশনে আইটেমগুলোর সংখ্যা বা ফ্রিকোয়েন্সি ট্র্যাক করে। সাধারণ Set বা List এর বিপরীতে, একটি Bag প্রতিটি উপাদানের সাথে তার উপস্থিতির সংখ্যাটি সংরক্ষণ করে।

মূল বৈশিষ্ট্য:

  • একই আইটেম একাধিক বার যোগ করা যায়।
  • প্রতিটি আইটেমের ফ্রিকোয়েন্সি বা সংখ্যার ট্র্যাক রাখা হয়।
  • ডুপ্লিকেট আইটেমের ব্যবস্থাপনা সহজ করে।

Bag এর ইমপ্লিমেন্টেশন

অ্যাপাচি কমন্স কালেকশনস এ বেশ কয়েকটি ক্লাস রয়েছে যা Bag ইন্টারফেস ইমপ্লিমেন্ট করে:

  • HashBag
  • TreeBag
  • HashMultiSet

Bag এর ব্যবহার উদাহরণ

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;

public class BagExample {
    public static void main(String[] args) {
        // HashBag তৈরি
        Bag<String> bag = new HashBag<>();

        // আইটেম যোগ করা
        bag.add("Apple");
        bag.add("Banana", 2); // দুইবার Banana যোগ করা
        bag.add("Orange");

        // প্রতিটি আইটেমের ফ্রিকোয়েন্সি দেখা
        System.out.println("Apple count: " + bag.getCount("Apple"));   // আউটপুট: 1
        System.out.println("Banana count: " + bag.getCount("Banana")); // আউটপুট: 2

        // সব আইটেম দেখা
        System.out.println("Bag elements: " + bag);

        // একটি আইটেম সরানো
        bag.remove("Banana");
        System.out.println("Updated Bag elements: " + bag);
    }
}

আউটপুট:

Apple count: 1  
Banana count: 2  
Bag elements: [1:Apple, 2:Banana, 1:Orange]  
Updated Bag elements: [1:Apple, 1:Banana, 1:Orange]  

Bag ব্যবহারের ক্ষেত্র

১. ডেটা কাউন্টিং বা ফ্রিকোয়েন্সি ট্র্যাকিং

Bag এমন ক্ষেত্রে ব্যবহার করা হয় যেখানে ডেটার ফ্রিকোয়েন্সি ট্র্যাক করতে হবে। যেমন:

  • একটি তালিকায় প্রতিটি শব্দ কতবার এসেছে তা গণনা করা।
  • ইনভেন্টরির স্টক ব্যবস্থাপনা।

২. ডুপ্লিকেট ডেটা ম্যানেজমেন্ট

Bag এমন পরিস্থিতিতে কার্যকর যেখানে ডুপ্লিকেট ডেটা সহজে পরিচালনা করতে হবে।

৩. ডেটা এনালাইসিস

Bag ফ্রিকোয়েন্সি ডেটা বিশ্লেষণের জন্য উপকারী। উদাহরণস্বরূপ:

  • একটি ইভেন্টে অংশগ্রহণকারীদের পছন্দ ট্র্যাক করা।
  • পণ্য বিক্রয়ের সংখ্যা গণনা।

৪. গেম ডেভেলপমেন্ট

গেমের ইনভেন্টরি ব্যবস্থাপনা যেখানে একটি নির্দিষ্ট আইটেমের সংখ্যা প্রয়োজন।


TreeBag এর ব্যবহার

TreeBag একটি Bag যা আইটেমগুলোকে স্বাভাবিক ক্রমে (natural order) সাজিয়ে রাখে।

import org.apache.commons.collections4.bag.TreeBag;

public class TreeBagExample {
    public static void main(String[] args) {
        // TreeBag তৈরি
        TreeBag<String> treeBag = new TreeBag<>();

        // আইটেম যোগ করা
        treeBag.add("Banana");
        treeBag.add("Apple");
        treeBag.add("Orange");
        treeBag.add("Apple");

        // সাজানো আইটেম
        System.out.println("Sorted Bag: " + treeBag);
    }
}

আউটপুট:

Sorted Bag: [2:Apple, 1:Banana, 1:Orange]  

Bag এর সুবিধা

  1. সহজ ডেটা ফ্রিকোয়েন্সি ম্যানেজমেন্ট:
    ডেটার উপস্থিতি গণনা সহজ।
  2. ডুপ্লিকেট ম্যানেজমেন্ট:
    ডুপ্লিকেট ডেটা সঠিকভাবে হ্যান্ডেল করা যায়।
  3. উন্নত পারফরম্যান্স:
    ফ্রিকোয়েন্সি ট্র্যাকিংয়ের জন্য বিশেষভাবে অপটিমাইজড।
  4. কাস্টমাইজেশন সহজ:
    TreeBag, HashBag এর মতো ভিন্ন ভিন্ন ইমপ্লিমেন্টেশনের মাধ্যমে বিভিন্ন প্রয়োজন মেটানো যায়।

সারাংশ

Bag একটি কার্যকর ডেটা স্ট্রাকচার যা ডেটার ফ্রিকোয়েন্সি বা সংখ্যা পরিচালনা করতে ব্যবহৃত হয়। এটি ডুপ্লিকেট ডেটার ব্যবস্থাপনা সহজ করে এবং বিভিন্ন ব্যবহারিক ক্ষেত্রে, যেমন ডেটা এনালাইসিস, ইনভেন্টরি ম্যানেজমেন্ট, এবং গেম ডেভেলপমেন্টে, অত্যন্ত কার্যকর।

common.content_added_by

HashBag এবং TreeBag

106
106

অ্যাপাচি কমন্স কালেকশনস লাইব্রেরিতে Bag হলো একটি বিশেষ ডেটা স্ট্রাকচার, যা একটি কালেকশনে উপাদানগুলোর সংখ্যা (count) ট্র্যাক করতে ব্যবহৃত হয়। এর দুটি সাধারণ ইমপ্লিমেন্টেশন হল HashBag এবং TreeBag


Bag কি?

Bag একটি ইন্টারফেস, যা এমন কালেকশন প্রদান করে যেখানে প্রতিটি উপাদানের উপস্থিতির সংখ্যা সংরক্ষণ করা হয়। এটি সাধারণ Set-এর মতো হলেও, উপাদানগুলির সংখ্যা গুনে রাখতে পারে।


HashBag কি?

HashBag হল Bag-এর একটি ইমপ্লিমেন্টেশন, যা একটি HashMap ব্যবহার করে উপাদান এবং তাদের সংখ্যা সংরক্ষণ করে। এটি অর্ডার সংরক্ষণ করে না, তবে দ্রুত অ্যাক্সেস প্রদান করে।

HashBag-এর বৈশিষ্ট্য

  • দ্রুত পারফরম্যান্স।
  • উপাদানগুলোর সংখ্যা ট্র্যাক করার জন্য HashMap ব্যবহার করে।
  • অর্ডারের উপর নির্ভরশীল নয়।

TreeBag কি?

TreeBag হল Bag-এর আরেকটি ইমপ্লিমেন্টেশন, যা একটি TreeMap ব্যবহার করে উপাদান এবং তাদের সংখ্যা সংরক্ষণ করে। এটি উপাদানগুলোকে সাজানো (sorted) অবস্থায় রাখে।

TreeBag-এর বৈশিষ্ট্য

  • উপাদানগুলো স্বয়ংক্রিয়ভাবে সাজানো হয়।
  • সংখ্যাগুলো গুনে রাখে।
  • TreeMap ব্যবহার করে, যা Comparable ইন্টারফেস বা কাস্টম কম্পারেটর সমর্থন করে।

উদাহরণ: HashBag ব্যবহার

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;

public class HashBagExample {
    public static void main(String[] args) {
        // HashBag তৈরি
        Bag<String> hashBag = new HashBag<>();

        // উপাদান যোগ করা
        hashBag.add("Apple", 3);
        hashBag.add("Orange", 2);
        hashBag.add("Banana", 1);

        // ডেটা রিট্রিভ করা
        System.out.println("Bag contents: " + hashBag);
        System.out.println("Count of Apple: " + hashBag.getCount("Apple"));

        // উপাদান সরানো
        hashBag.remove("Apple", 2);
        System.out.println("Bag contents after removal: " + hashBag);
    }
}

আউটপুট:

Bag contents: [Apple:3, Orange:2, Banana:1]
Count of Apple: 3
Bag contents after removal: [Apple:1, Orange:2, Banana:1]

উদাহরণ: TreeBag ব্যবহার

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.TreeBag;

public class TreeBagExample {
    public static void main(String[] args) {
        // TreeBag তৈরি
        Bag<String> treeBag = new TreeBag<>();

        // উপাদান যোগ করা
        treeBag.add("Apple", 3);
        treeBag.add("Orange", 2);
        treeBag.add("Banana", 1);

        // ডেটা রিট্রিভ করা
        System.out.println("Bag contents (sorted): " + treeBag);
        System.out.println("Count of Orange: " + treeBag.getCount("Orange"));

        // উপাদান যোগ বা সরানো
        treeBag.add("Grapes");
        treeBag.remove("Apple", 1);

        System.out.println("Bag contents after update: " + treeBag);
    }
}

আউটপুট:

Bag contents (sorted): [Apple:3, Banana:1, Orange:2]
Count of Orange: 2
Bag contents after update: [Apple:2, Banana:1, Grapes:1, Orange:2]

HashBag এবং TreeBag-এর তুলনা

বৈশিষ্ট্যHashBagTreeBag
অর্ডারউপাদান অর্ডার সংরক্ষণ করে নাউপাদান সাজানো অবস্থায় থাকে
ডেটা স্ট্রাকচারHashMap ব্যবহার করেTreeMap ব্যবহার করে
পারফরম্যান্সদ্রুত অ্যাক্সেস (O(1))তুলনামূলক ধীর (O(log n))
ব্যবহারক্ষেত্রযখন সাজানোর প্রয়োজন নেইযখন উপাদান সাজানোর প্রয়োজন হয়

সারাংশ

HashBag এবং TreeBag উভয়ই Bag ইন্টারফেসের কার্যকর ইমপ্লিমেন্টেশন, তবে এদের ব্যবহার নির্ভর করে প্রয়োজনীয় পারফরম্যান্স এবং সাজানোর প্রয়োজনীয়তার উপর। HashBag দ্রুত কার্যক্রমের জন্য উপযুক্ত, যেখানে TreeBag সাজানো ডেটার জন্য কার্যকর। অ্যাপাচি কমন্স কালেকশনসের এই ফিচারগুলো ডেটা ম্যানেজমেন্টে আরও কার্যকরিতা যোগ করে।

common.content_added_by

TypedBag এবং SortedBag ব্যবহার

144
144

অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরি Java প্রোগ্রামিং ভাষায় বিভিন্ন ধরনের শক্তিশালী ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। এর মধ্যে দুটি গুরুত্বপূর্ণ ক্লাস হল TypedBag এবং SortedBag, যা আপনার ডেটা ম্যানিপুলেশনকে আরও কার্যকরী এবং সুবিধাজনক করে তোলে। এগুলি বিশেষভাবে উপকারী যখন আপনাকে নির্দিষ্ট ডেটা টাইপ বা ক্রম অনুসারে আইটেম সংরক্ষণ করতে হয়।

এই টিউটোরিয়ালে, আমরা TypedBag এবং SortedBag ক্লাসগুলি এবং এগুলির ব্যবহার কিভাবে করা হয় তা আলোচনা করব।


১. TypedBag (টাইপড ব্যাগ)

TypedBag হল একটি ধরনের Bag ডেটা স্ট্রাকচার যা শুধুমাত্র নির্দিষ্ট ধরনের (type-safe) উপাদান ধারণ করে। এটি সাধারণত Bag এর মতো কাজ করে, তবে এখানে আপনি একটি নির্দিষ্ট টাইপ (যেমন String, Integer, ইত্যাদি) নির্ধারণ করে দিতে পারেন যাতে এটি কেবল সেই টাইপের উপাদান ধারণ করতে পারে। এর ফলে, এটি টাইপ সেফটি নিশ্চিত করে এবং ডেটা সংগ্রহে সঠিকতা বজায় রাখে।

TypedBag ব্যবহার করা হয় যখন আপনি একটি ডেটা স্ট্রাকচার চান যা শুধুমাত্র একটি নির্দিষ্ট টাইপের উপাদান ধারণ করবে, এবং এটি টাইপ সম্পর্কিত সমস্যা বা কনভার্সন এড়াতে সাহায্য করবে।

উদাহরণ: TypedBag ব্যবহার

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;
import org.apache.commons.collections4.typed.TypedBag;

public class TypedBagExample {
    public static void main(String[] args) {
        // Create a TypedBag that only accepts Strings
        Bag<String> typedBag = TypedBag.<String>typedBag(new HashBag<>());

        // Add elements to the TypedBag
        typedBag.add("apple");
        typedBag.add("banana");
        typedBag.add("apple");

        // Print out the bag
        System.out.println("Bag contents: " + typedBag);
        System.out.println("Count of apple: " + typedBag.getCount("apple"));  // Output: 2
    }
}

এখানে:

  • TypedBag.<String>typedBag(new HashBag<>()) দিয়ে আমরা একটি TypedBag তৈরি করেছি যা শুধুমাত্র String টাইপের উপাদান গ্রহণ করবে।
  • typedBag.add("apple") দিয়ে apple আইটেমটি যোগ করা হয়েছে এবং তার গণনা typedBag.getCount("apple") ব্যবহার করে দেখানো হয়েছে।

TypedBag এর ব্যবহার টাইপ সেফটি নিশ্চিত করতে সহায়তা করে, যার ফলে কোডে টাইপ সম্পর্কিত ভুল কমে যায় এবং ডেটার শুদ্ধতা নিশ্চিত হয়।


২. SortedBag (সোর্টেড ব্যাগ)

SortedBag হল একটি বিশেষ ধরনের Bag যা উপাদানগুলিকে একটি নির্দিষ্ট ক্রম (অর্থাৎ সোর্টেড অর্ডার) অনুযায়ী সংগঠিত করে রাখে। এটি সাধারণ Bag ডেটা স্ট্রাকচারের মতো কাজ করে, তবে এখানে ডেটাগুলি ক্রম অনুসারে সাজানো থাকে, যেমন অ্যালফাবেটিক্যাল অথবা নাম্বারিক্যাল

এটি ব্যবহার করা হয় যখন আপনি চান যে আপনার Bag এর উপাদানগুলি একটি নির্দিষ্ট ক্রমে সাজানো থাকবে, যেমন সংখ্যার ক্রম বা অক্ষরের ক্রম।

উদাহরণ: SortedBag ব্যবহার

import org.apache.commons.collections4.SortedBag;
import org.apache.commons.collections4.bag.TreeBag;

public class SortedBagExample {
    public static void main(String[] args) {
        // Create a SortedBag that sorts elements in natural order
        SortedBag<String> sortedBag = new TreeBag<>();
        
        // Add elements to the SortedBag
        sortedBag.add("banana");
        sortedBag.add("apple");
        sortedBag.add("cherry");
        
        // Print out the sorted bag
        System.out.println("Sorted Bag contents: " + sortedBag);
    }
}

এখানে:

  • TreeBag হল একটি SortedBag ইমপ্লিমেন্টেশন যা উপাদানগুলিকে তাদের প্রাকৃতিক অর্ডারে সাজায় (যেমন apple, banana, cherry অ্যালফাবেটিক্যালভাবে সাজানো হবে)।
  • sortedBag.add("banana"), sortedBag.add("apple"), এবং sortedBag.add("cherry") মাধ্যমে ডেটা যুক্ত করা হয়েছে।

SortedBag ব্যবহারের মাধ্যমে আপনি ডেটার উপর সোজা এবং স্বয়ংক্রিয়ভাবে সোর্টেশন প্রয়োগ করতে পারেন, যা বিশেষভাবে উপকারী যখন আপনি ডেটা সংরক্ষণ করতে চান এবং সেই ডেটাকে একটি নির্দিষ্ট অর্ডারে আনতে চান।


৩. TypedBag এবং SortedBag এর সুবিধা

TypedBag এর সুবিধা:

  • টাইপ সেফটি: এটি নিশ্চিত করে যে শুধুমাত্র নির্দিষ্ট টাইপের উপাদানগুলি ব্যবহৃত হবে, যা টাইপ সম্পর্কিত ত্রুটি বা কনভার্সন থেকে রক্ষা করে।
  • ডেটা শুদ্ধতা: যেহেতু এটি একটি নির্দিষ্ট টাইপের ডেটা গ্রহণ করে, এটি ডেটার শুদ্ধতা এবং নিরাপত্তা নিশ্চিত করে।

SortedBag এর সুবিধা:

  • সরাসরি সোর্টেশন: উপাদানগুলো স্বয়ংক্রিয়ভাবে সঠিক অর্ডারে সাজানো থাকে, যা ডেটার সংগঠন এবং প্রক্রিয়াকরণ সহজ করে তোলে।
  • ইউটিলিটি: এটি বিভিন্ন শর্তের জন্য কার্যকরী, যেমন অ্যালফাবেটিক্যাল বা নম্বরিক্যাল সোর্টিং।

৪. TypedBag এবং SortedBag এর মধ্যে পার্থক্য

  • TypedBag মূলত টাইপ সেফটি নিশ্চিত করার জন্য ব্যবহৃত হয়, যেখানে আপনি একটি নির্দিষ্ট টাইপের ডেটা ব্যবহার করতে পারেন, অন্যদিকে SortedBag ডেটার ক্রম অনুসারে সাজানো থাকে।
  • TypedBag আপনাকে টাইপ সেফটি প্রদান করে, তবে SortedBag আপনাকে ক্রমানুসারে সজ্জিত ডেটা প্রদান করে।

সারাংশ

অ্যাপাচি কমন্স কালেকশনস (Apache Commons Collections) লাইব্রেরিতে TypedBag এবং SortedBag হল দুটি গুরুত্বপূর্ণ ডেটা স্ট্রাকচার যা ডেটা ম্যানিপুলেশন এবং সংগঠনের জন্য বিশেষভাবে উপকারী। TypedBag টাইপ সেফটি নিশ্চিত করতে সাহায্য করে, যেখানে শুধুমাত্র নির্দিষ্ট টাইপের উপাদান সংরক্ষণ করা যায়। অন্যদিকে, SortedBag উপাদানগুলিকে একটি নির্দিষ্ট অর্ডারে (যেমন অ্যালফাবেটিক্যাল বা নম্বরিক্যাল) সাজাতে সাহায্য করে। এই দুটি ক্লাস আপনার ডেটা ম্যানিপুলেশন এবং কালেকশন ব্যবস্থাপনা আরও শক্তিশালী ও কার্যকরী করে তোলে।

common.content_added_by

Counting Elements in a Bag

138
138

Apache Commons Collections লাইব্রেরিতে Bag একটি বিশেষ ধরনের ডেটা স্ট্রাকচার যা সাধারণভাবে উপাদানগুলির উপস্থিতি (occurrences) গুনতে এবং frequency counting করতে ব্যবহৃত হয়। Bag কোলেকশনের মধ্যে একটি উপাদান একাধিকবার উপস্থিত থাকতে পারে এবং এটি উপাদানগুলির সংখ্যা (ফ্রিকোয়েন্সি) সংরক্ষণ করে। Bag কোলেকশনগুলি উপাদানগুলির উপস্থিতি গণনা করার জন্য খুবই কার্যকরী।

এই নিবন্ধে আমরা Bag কোলেকশনের উপাদানগুলো কিভাবে গোনা (counting) যায় এবং Apache Commons Collections এ এর ব্যবহার কিভাবে করা হয় তা বিস্তারিতভাবে দেখব।


১. Bag কোলেকশন কী?

Bag হল একটি কোলেকশন যা সাধারণত frequency সংরক্ষণ করে, অর্থাৎ এটি একটি উপাদানের একাধিক উপস্থিতি অনুমোদন করে এবং উপাদানের count বা frequency ট্র্যাক করে। এটি সাধারণত java.util.Set বা java.util.List এর চেয়ে ভিন্ন, কারণ একটি উপাদান কেবল একবার থাকতে পারে এমন কোনো সীমাবদ্ধতা এখানে নেই।

Apache Commons Collections লাইব্রেরি Bag কোলেকশনের জন্য HashBag এবং TreeBag ইমপ্লিমেন্টেশন সরবরাহ করে।

  • HashBag: এটি একটি অ্যাক্টিভ কোলেকশন যা hashing ভিত্তিক ডেটা স্টোরেজ ব্যবহার করে।
  • TreeBag: এটি একটি লিনিয়ার কোলেকশন যা sorted উপাদান সংরক্ষণ করে।

২. Bag ব্যবহার করে উপাদান গোনা (Counting Elements)

Bag কোলেকশনে উপাদানগুলির উপস্থিতি গণনা করার জন্য getCount() মেথড ব্যবহার করা হয়। এই মেথডটি কোলেকশনে একটি নির্দিষ্ট উপাদানের উপস্থিতি সংখ্যা (ফ্রিকোয়েন্সি) রিটার্ন করে।

উদাহরণ: Bag এ উপাদান গণনা

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;

public class BagCountingExample {
    public static void main(String[] args) {
        // Create a Bag (HashBag implementation)
        Bag<String> bag = new HashBag<>();
        
        // Add elements to the Bag
        bag.add("apple");
        bag.add("banana");
        bag.add("apple");
        bag.add("cherry");
        bag.add("banana");
        bag.add("banana");
        
        // Count occurrences of each element
        System.out.println("apple count: " + bag.getCount("apple"));   // Output: 2
        System.out.println("banana count: " + bag.getCount("banana")); // Output: 3
        System.out.println("cherry count: " + bag.getCount("cherry")); // Output: 1
        System.out.println("grape count: " + bag.getCount("grape"));   // Output: 0 (grape is not in the bag)
    }
}

এখানে:

  • getCount("apple"): এটি কোলেকশনে "apple" উপাদানটির উপস্থিতির সংখ্যা গণনা করে (এটি ২ বার আছে)।
  • getCount("banana"): এটি "banana" উপাদানটির উপস্থিতির সংখ্যা গণনা করে (এটি ৩ বার আছে)।
  • getCount("grape"): যদি উপাদানটি কোলেকশনে না থাকে, তবে এটি ০ রিটার্ন করবে।

HashBag এবং TreeBag এর মধ্যে পার্থক্য:

  • HashBag সাধারণত দ্রুত অ্যাক্সেস প্রদান করে এবং কোনো নির্দিষ্ট অর্ডার বজায় রাখে না।
  • TreeBag একটি সোজানো (sorted) কোলেকশন, যেখানে উপাদানগুলো natural order বা কাস্টম অর্ডারে থাকে।

৩. Bag ব্যবহার করার অন্যান্য ফিচার

এছাড়া Bag কোলেকশন কিছু অতিরিক্ত কার্যকারিতা প্রদান করে যা কোলেকশন ম্যানিপুলেশন এবং ফ্রিকোয়েন্সি গণনার জন্য সহায়ক। এর মধ্যে কিছু গুরুত্বপূর্ণ মেথড হল:

৩.১ add() এবং remove():

  • add() মেথডের মাধ্যমে কোলেকশনে একটি নতুন উপাদান যোগ করা যায়।
  • remove() মেথডের মাধ্যমে একটি নির্দিষ্ট উপাদান সরিয়ে ফেলা যায়।

৩.২ uniqueSet():

এটি Bag এর উপাদানগুলির unique set প্রদান করে, অর্থাৎ কেবলমাত্র একবার উপস্থিত থাকা উপাদানগুলো।

import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;
import java.util.Set;

public class BagUniqueSetExample {
    public static void main(String[] args) {
        // Create a Bag (HashBag implementation)
        Bag<String> bag = new HashBag<>();
        
        // Add elements to the Bag
        bag.add("apple");
        bag.add("banana");
        bag.add("apple");
        bag.add("cherry");
        
        // Get unique set of elements
        Set<String> uniqueSet = bag.uniqueSet();
        
        System.out.println("Unique elements: " + uniqueSet);  // Output: [apple, banana, cherry]
    }
}

এখানে:

  • uniqueSet() মেথডটি শুধুমাত্র একটি একক উপস্থিতির সাথে উপাদানগুলো প্রদান করে। এটি apple, banana, এবং cherry কে একবার দেখাবে, যদিও তাদের ফ্রিকোয়েন্সি ভিন্ন।

৩.৩ removeCount():

এই মেথডটি একটি নির্দিষ্ট উপাদানের সংখ্যা হ্রাস করে।

bag.remove("apple", 1);  // Removes 1 occurrence of "apple"

৪. Apache Commons Collections Dependency

আপনি যদি Apache Commons Collections ব্যবহার করতে চান, তবে আপনাকে এটি আপনার প্রোজেক্টে যুক্ত করতে হবে। যদি আপনি Maven ব্যবহার করেন, তবে আপনার pom.xml ফাইলে নিম্নলিখিত ডিপেনডেন্সি যোগ করতে হবে:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>

এটি Apache Commons Collections লাইব্রেরি আপনার প্রোজেক্টে যুক্ত করবে, যার মাধ্যমে আপনি Bag এবং অন্যান্য ফিচার ব্যবহার করতে পারবেন।


সারাংশ

Apache Commons Collections লাইব্রেরির Bag কোলেকশনটি এমন একটি শক্তিশালী ডেটা স্ট্রাকচার যা উপাদানগুলির উপস্থিতি গণনা করে এবং frequency counting এর জন্য ব্যবহার করা হয়। getCount() মেথডের মাধ্যমে আপনি যে কোন উপাদানের ফ্রিকোয়েন্সি সহজেই পেতে পারেন। Bag কোলেকশনটি বিভিন্ন কার্যকারিতার সাথে আসে যেমন add(), remove(), uniqueSet(), এবং removeCount(), যা কোলেকশন ম্যানিপুলেশনকে আরও সহজ এবং কার্যকরী করে তোলে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion